package spring.cloud.tasks.tasks_manager.schedule;

import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.List;

@Slf4j
@Setter
@Getter
public class SlightlyAdjustTaskInstances {
    public String taskId;
    public String taskType;
    public String stateFullTask;
    public List<TaskInstanceInfo> add = new ArrayList<>();
    public long updateVersion;
    //如果存在删除那么则取消当前版本执行没有进行调度的任务实例
    //尽量打上取消标记，不一定打上(try mark设计模式)，调度程序遇到这个标记，那么则不进行预分配，执行。
    //快速的创建该任务新的版本任务实例后，快速的打上取消标志
    public boolean deleteOldVersionTaskInstances = false;

    public BackupInformation backUp() {
        BackupInformation backupInformation = new BackupInformation();
        backupInformation.taskId = taskId;
        backupInformation.updateVersion = updateVersion;
        for (TaskInstanceInfo taskInstanceInfo : this.add) {
            backupInformation.add.add(taskInstanceInfo.getTaskInstanceId());
        }
        backupInformation.deleteOldVersionTaskInstances = deleteOldVersionTaskInstances;
        return backupInformation;
    }

    public static class BackupInformation {
        public String taskId;
        public long updateVersion;
        public List<String> add = new ArrayList<String>();

        //如果存在删除那么则取消当前版本执行没有进行调度的任务实例
        //尽量打上取消标记，不一定打上(try mark设计模式)，调度程序遇到这个标记，那么则不进行预分配，执行。
        //快速的创建该任务新的版本任务实例后，快速的打上取消标志
        public boolean deleteOldVersionTaskInstances = false;
    }
}
